package 树.BST;

/*
解题思路：
   这题首先确立思路。是要用中序遍历，但是中序遍历是把节点的值按照从小到大的顺序排列。
   我们题目要求的确实大于等于当前节点的值的和。即我们要想到累加和。
   也就是要把节点的值按照从大到小排列（反中序遍历：先递归右子树，再递归左子树）。
   然后每次遍历到root.val的时候，就加上大于root.val的值和它本身，但是因为用了反中序遍历，也就是加上root.val前面的值和它本身，这一看就是一个累加，即定义一个sum来保存累加的和。
   要注意，sum不能定义在方法内，这样每次递归都会清零，要定义成全局的

*/
public class 把二叉搜索树转换为累加树_538 {

    int sum = 0;//注意这个sum不能放到方法里面，不然每次递归都会把sum归零，让前面的累加和失效。

    public TreeNode convertBST(TreeNode root) {


        if (root == null) {
            return root;
        }
        convertBST(root.right);
        sum += root.val;//用来保存累加和
        root.val = sum;//把root的值更新为累计和
        convertBST(root.left);

        return root;
    }

}
